/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.ListIterator;

/**
 *
 * @author Yan Carlos Marín Osorio <yanCarlosmarínosorio@gmail.com>
 */
public class Cliente {

    private LinkedList<Alimento> pedido;

    public Cliente() {
        pedido = new LinkedList<Alimento>();
    }

    public LinkedList<Alimento> getPedido() {
        return pedido;
    }

    /**
     * buusca un alimento en la lista de pedido
     *
     * @param nombre, nombre del alimento que se buscara
     * @return el alimento si lo encuentra, de lo contrario null
     */
    public Alimento buscarAlimentoPedido(String nombre) {
        ListIterator<Alimento> iterador = pedido.listIterator();
        while (iterador.hasNext()) {
            Alimento a = iterador.next();
            if (a.getNombre().equalsIgnoreCase(nombre)) {
                return a;
            }
        }
        return null;
    }

    /**
     * agrega un alimento al pedido
     *
     * @param a, alimento que se registrara
     * @return true si el alimento se registra, por el contrario null
     */
    public String agregarAlimentoPedido(Alimento a, int cantidad) {
        if (buscarAlimentoPedido(a.getNombre()) == null) {
            if (a instanceof Comida) {
                Comida aux = (Comida) a;
                Comida nuevo = new Comida(aux.getTipo(), aux.getNombre(), aux.getPrecio(), cantidad);
                pedido.add(nuevo);
                return "El alimento  fue añadido al cliente";
            }
            Bebida aux = (Bebida) a;
            Bebida nuevo = new Bebida(aux.getNombre(), aux.getPrecio(), cantidad);
            pedido.add(nuevo);
            return "El alimento  fue añadido al cliente";
        }
        return "Imposible vender";
    }

    /**
     * modifica el pedido de un cliente
     *
     * @param nombre del alimento a modificar
     * @return si el cliente ya tiene el pedido, envia un mensaje diciendo que
     * se modifico la cantidad, si por el contrario el cliente no ha consumido
     * ese alimento entonces informa que se añadio nuevo alimento al cliente
     */
    public String modificarPedido(Alimento nombre, int cantidad) {
        Alimento alimento = buscarAlimentoPedido(nombre.getNombre());
        if (alimento != null) {
            alimento.setCantidad(alimento.getCantidad() + cantidad);
            return "Pedido modificado, hemos aumentado la cantidad";
        } else {
            pedido.add(nombre);
            return "pedido modificado, se ha añadido nuevo alimento";
        }
    }

    /**
     * Calcula la cuenta total del cliente
     *
     * @return el valor de todo el pedido del cliente
     */
    public double calcularCuenta() {
        double cuentaTotal = 0;
        ListIterator<Alimento> iterador = pedido.listIterator();
        while (iterador.hasNext()) {
            Alimento alimento = iterador.next();
            cuentaTotal += alimento.getPrecio() * alimento.getCantidad();
        }
        return cuentaTotal;
    }

    
    /**
     * revisar el pedido de todos los clientes 
     * @return 
     */
    public ArrayList<Alimento> revisarPedido() {
        ListIterator<Alimento> iterador = pedido.listIterator();
        ArrayList<Alimento> detallesCliente = new ArrayList<Alimento>();
        while (iterador.hasNext()) {
            Alimento a = iterador.next();
            detallesCliente.add(a);
        }
        return detallesCliente;
    }

}
